from tool import read_file_csv
import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
# import sklearn.linear_model as skl


def linear_regression(x,y):
    '''
    :param x: X轴数据(需要二维数组)
    :param y: Y轴数据
    :return: 预测的Y轴数据
    '''
    # 创建线性回归模型
    model = LinearRegression()  # 创建线性回归模型，参数默认
    model.fit(x, y)  # 拟合数据，可以理解用 x 去预测 y 
    r_sq = model.score(x, y)  # 查看拟合准确率情况,这里的检验是 R^2 ，趋近于1模型拟合越好
    print('coefficient of determination:', r_sq)
    # print('intercept:', model.intercept_)  # 截距
    # print('slope:', model.coef_)  # 系数(数组)
    y_predict = model.predict(x)  # 查看预测结果
    # print('predicted response:', y_predict, sep='\n')  # 预测Y值结果
    return y_predict

def show_pic(x ,y ,y_predict ,xlable=None ,ylable=None ,title=None ):
    '''
    :param x: X轴数据
    :param y: Y轴数据
    :param y_predict: Y轴预测数据
    :param xlable: 分析图X轴名称
    :param ylable: 分析图Y轴名称
    :param title: 分析图名称
    #作用： 显示分析图
    '''
    # 画图看最后的数据
    plt.scatter(x, y)  # 画散点图
    plt.plot(x, y_predict,color='red')  # 画线型图
    plt.rcParams["font.sans-serif"] = "SimHei"
    plt.title(title)
    plt.xlabel(xlable)
    plt.ylabel(ylable)
    plt.savefig(f"./photo/{title}")
    plt.close()
    # plt.show()
    print(title,"over!!!")


def concern(df,xlable,ylable ,title=None):
    '''
    :param df: DataFrame数据
    :param xlable: X轴标签(DataFrame中的列名)
    :param ylable: Y轴标签(DataFrame中的列名)
    :param title: 分析图名称
    #作用： 显示分析图
    '''
    x = np.array(list(df[xlable])).reshape(-1,1)
    y = np.array(list(df[ylable]))
    y_predict = linear_regression(x,y)
    show_pic(x ,y ,y_predict ,xlable = xlable ,ylable = ylable ,title=title)


def main():
    fileurl = "./file/new_book.csv"
    df = read_file_csv(fileurl,encoding='gbk')
    # 字数和营养液数分析图
    concern(df,"全文字数","营养液数",title="字数和营养液数分析图")
    # 总书评数和营养液数分析图
    concern(df,"总书评数","营养液数",title="总书评数和营养液数分析图")
    # 当前被收藏数和营养液数分析图
    concern(df, "当前被收藏数", "营养液数", title="当前被收藏数和营养液数分析图")
    # 字数和总书评数分析图
    concern(df, "全文字数", "总书评数", title="字数和总书评数分析图")
    # 字数和当前被收藏数分析图
    concern(df, "全文字数", "当前被收藏数", title="字数和当前被收藏数分析图")
    # 总书评数和当前被收藏数分析图
    concern(df,"总书评数", "当前被收藏数", title="总书评数和当前被收藏数分析图")



if __name__ == '__main__':
    main()